<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>scugic: xscugic_example.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="HTML_custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xlogo_bg.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">scugic
   </div>
   <div id="projectbrief">Vitis Drivers API Documentation</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Overview</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="globals.html"><span>APIs</span></a></li>
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="pages.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('xscugic__example_8c.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">xscugic_example.c File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<div class="textblock"><p>This file contains a design example using the Interrupt Controller driver (<a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a>) and hardware device. </p>
<p>Please reference other device driver examples to see more examples of how the intc and interrupts can be used by a software application.</p>
<dl class="section note"><dt>Note</dt><dd></dd></dl>
<p>None</p>
<pre></pre><pre>MODIFICATION HISTORY:
Ver   Who  Date     Changes
</p>
<hr/>
<p>
1.00a drg  01/18/10 First release
5.0   mus  04/04/22 Updated example to support it on any CPU
                    instance, for which example is compiled.
                    It fixes CR#1126331.
5.0   adk  04/18/22 Replace infinite while loop with
                      Xil_WaitForEventSet() API.
      adk  30/05/22 Fix typecast of the variable InterruptProcessed.
      adk  20/07/22 Update the Xil_WaitForEventSet() API arguments as
                      per latest API.
5.1   mus  02/13/23 Support example for each core of APU/RPU clusters in
                    VERSAL_NET SoC.
5.2   mus  07/27/23 Removed dependency on XPAR_CPU_ID.
5.2   ml   02/21/24 Fix compilation error reported by C++ compiler.
5.2   mus  04/33/34 Use interrupt wrapper APIs in case of SDT flow.
5.5   ml   02/05/25 Fixed compilation warnings and errors
</pre> </div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a60ae419afb4e026a75cda3350d50f1cb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xscugic__example_8c.html#a60ae419afb4e026a75cda3350d50f1cb">ScuGicExample</a> (u16 DeviceId)</td></tr>
<tr class="memdesc:a60ae419afb4e026a75cda3350d50f1cb"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is an example of how to use the interrupt controller driver (<a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a>) and the hardware device.  <a href="#a60ae419afb4e026a75cda3350d50f1cb">More...</a><br/></td></tr>
<tr class="separator:a60ae419afb4e026a75cda3350d50f1cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89589e10926b9add4601dac19679feda"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xscugic__example_8c.html#a89589e10926b9add4601dac19679feda">SetUpInterruptSystem</a> (<a class="el" href="struct_x_scu_gic.html">XScuGic</a> *XScuGicInstancePtr)</td></tr>
<tr class="memdesc:a89589e10926b9add4601dac19679feda"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function connects the interrupt handler of the interrupt controller to the processor.  <a href="#a89589e10926b9add4601dac19679feda">More...</a><br/></td></tr>
<tr class="separator:a89589e10926b9add4601dac19679feda"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d6264927eb02cdac505c92079fa9e03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xscugic__example_8c.html#a2d6264927eb02cdac505c92079fa9e03">DeviceDriverHandler</a> (void *CallbackRef)</td></tr>
<tr class="memdesc:a2d6264927eb02cdac505c92079fa9e03"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is designed to look like an interrupt handler in a device driver.  <a href="#a2d6264927eb02cdac505c92079fa9e03">More...</a><br/></td></tr>
<tr class="separator:a2d6264927eb02cdac505c92079fa9e03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xscugic__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is the main function for the Interrupt Controller example.  <a href="#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br/></td></tr>
<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a2d6264927eb02cdac505c92079fa9e03"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void DeviceDriverHandler </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>CallbackRef</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is designed to look like an interrupt handler in a device driver. </p>
<p>This is typically a 2nd level handler that is called from the interrupt controller interrupt handler. This handler would typically perform device specific processing such as reading and writing the registers of the device to clear the interrupt condition and pass any data to an application using the device driver. Many drivers already provide this handler and the user is not required to create it.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">CallbackRef</td><td>is passed back to the device driver's interrupt handler by the <a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a> driver. It was given to the <a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a> driver in the <a class="el" href="group__scugic__api.html#ga48f9dd531aa861a74e6bd627943573ea" title="Makes the connection between the Int_Id of the interrupt source and the associated handler that is to...">XScuGic_Connect()</a> function call. It is typically a pointer to the device driver instance variable. In this example, we do not care about the callback reference, so we passed it a 0 when connecting the handler to the <a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a> driver and we make no use of it here.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>None.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>Referenced by <a class="el" href="xscugic__example_8c.html#a60ae419afb4e026a75cda3350d50f1cb">ScuGicExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a840291bc02cba5474a4cb46a9b9566fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int main </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This is the main function for the Interrupt Controller example. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">None.</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>XST_SUCCESS to indicate success, otherwise XST_FAILURE.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="xscugic__example_8c.html#a60ae419afb4e026a75cda3350d50f1cb">ScuGicExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a60ae419afb4e026a75cda3350d50f1cb"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ScuGicExample </td>
          <td>(</td>
          <td class="paramtype">u16&#160;</td>
          <td class="paramname"><em>DeviceId</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is an example of how to use the interrupt controller driver (<a class="el" href="struct_x_scu_gic.html" title="The XScuGic driver instance data. ">XScuGic</a>) and the hardware device. </p>
<p>This function is designed to work without any hardware devices to cause interrupts. It may not return if the interrupt controller is not properly connected to the processor in either software or hardware.</p>
<p>This function relies on the fact that the interrupt controller hardware has come out of the reset state such that it will allow interrupts to be simulated by the software.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">DeviceId</td><td>is Device ID of the Interrupt Controller Device, typically XPAR_&lt;INTC_instance&gt;_DEVICE_ID value from xparameters.h</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>XST_SUCCESS to indicate success, otherwise XST_FAILURE</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="group__scugic__api.html#ga1bb3866706357e2cd84c657e0e703986">XScuGic_Config::CpuBaseAddress</a>, <a class="el" href="xscugic__example_8c.html#a2d6264927eb02cdac505c92079fa9e03">DeviceDriverHandler()</a>, <a class="el" href="xscugic__example_8c.html#a89589e10926b9add4601dac19679feda">SetUpInterruptSystem()</a>, <a class="el" href="group__scugic__api.html#gaf8e0bfe31c0fa2ca654c36715a3c13f8">XScuGic_CfgInitialize()</a>, <a class="el" href="group__scugic__api.html#ga48f9dd531aa861a74e6bd627943573ea">XScuGic_Connect()</a>, <a class="el" href="group__scugic__api.html#gac965b9e3ae7668a92cf07a65bde142cc">XScuGic_Enable()</a>, <a class="el" href="group__scugic__api.html#gab2c0554b809121cc91a96fcd8c749c25">XScuGic_LookupConfig()</a>, <a class="el" href="group__scugic__api.html#ga081a9a62546b413d94e609894282a575">XScuGic_SelfTest()</a>, <a class="el" href="group__scugic__api.html#gaca28a576540ab5fcd75cee1f38917ae4">XScuGic_SoftwareIntr()</a>, and <a class="el" href="group__scugic__api.html#gaf6958ba672ad449aa981f7fae9412455">XSCUGIC_SPI_CPU0_MASK</a>.</p>

<p>Referenced by <a class="el" href="xscugic__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main()</a>.</p>

</div>
</div>
<a class="anchor" id="a89589e10926b9add4601dac19679feda"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int SetUpInterruptSystem </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct_x_scu_gic.html">XScuGic</a> *&#160;</td>
          <td class="paramname"><em>XScuGicInstancePtr</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function connects the interrupt handler of the interrupt controller to the processor. </p>
<p>This function is separate to allow it to be customized for each application. Each processor or RTOS may require unique processing to connect the interrupt handler.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">XScuGicInstancePtr</td><td>is the instance of the interrupt controller that needs to be worked on.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>None.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="group__scugic__api.html#gaa26a952ecd376be0bc3d8433023d1364">XScuGic_InterruptHandler()</a>.</p>

<p>Referenced by <a class="el" href="xscugic__example_8c.html#a60ae419afb4e026a75cda3350d50f1cb">ScuGicExample()</a>.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
	<p class="footer">&copy; Copyright 2015-2022 Xilinx, Inc. All Rights Reserved.</p>
	<p class="footer">&copy; Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.</p>
</div>
</body>
</html>
